package com.iflytek.day09;

public class Test {

    public static void main(String[] args) {

        int num = 1983;
//        int2Arr(num);
//        reverse(int2Arr(num));
        int encodeNum = encode(num);
        System.out.println(encodeNum);
        int decodeNum = decode(encodeNum);
        System.out.println(decodeNum);

    }

    /**
     * 1. 明确参数
     * 2. 明确返回值
     * 3. 起一个见名知意的方法名
     */

    /**
     * 整数转换为数组形式
     *
     * @param num 待转换的整数
     * @return 转换之后的数组
     */
    public static int[] int2Arr(int num) {

        int tempNum = num;
        // 例如：num-> 12345

        // 取得数字的长度
        int count = 0;
        while (tempNum != 0) {
            tempNum = tempNum / 10;
            count++;
        }

        // 根据数字的长度，构建出数组
        int[] arr = new int[count];
        // 12345%10 = 5 12345/10=1234
        // 1234%10 = 4 1234/10=123
        for (int i = arr.length - 1; i >= 0; i--) {
            arr[i] = num % 10;
            num = num / 10;
        }
        return arr;
    }


    // 2. 加密
    public static int encode(int num) {
        int[] arr = int2Arr(num);
        // 1. +5
        for (int i = 0; i < arr.length; i++) {
            arr[i] = arr[i] + 5;
        }
        // 2. %10
        for (int i = 0; i < arr.length; i++) {
            arr[i] = arr[i] % 10;
        }
        // 3. 反转
        arr = reverse(arr);

        // 4. 数组转数字
        // 1 9 8 3
        String str = "";
        for (int i = 0; i < arr.length; i++) {
            str += arr[i];
        }
        return Integer.parseInt(str);
    }


    public static int[] reverse(int[] arr) {

        for (int i = 0; i < arr.length / 2; i++) {
            int temp = arr[i];
            arr[i] = arr[arr.length - 1 - i];
            arr[arr.length - 1 - i] = temp;
        }
        return arr;
    }


    // 3. 解密
    public static int decode(int num) {
        int[] arr = int2Arr(num);
        // 1. 反转
        arr = reverse(arr);
        // 2. +10
        // 0-9 5-9=>10->14 0-4的需要+10
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] >= 0 && arr[i] <= 4) {
                arr[i] = arr[i] + 10;
            }
        }
        // 3. -5
        for (int i = 0; i < arr.length; i++) {
            arr[i] = arr[i] - 5;
        }

        //
        String str = "";
        for (int i = 0; i < arr.length; i++) {
            str += arr[i];
        }
        return Integer.parseInt(str);
    }

}
